package com.itlong.cloud.property.dao;

import com.itlong.cloud.POJO.PO.DeviceMediaInfoPO;
import com.itlong.cloud.POJO.VO.property.DeviceMediaInfoVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * <desc>
 *   多媒体信息持久层对象
 * </desc>
 *
 * @createDate 2017/9/21
 */
@Mapper
@Repository
public interface IDeviceMediaInfoDao extends IAbstractBaseDao<DeviceMediaInfoPO> {
    /**
     * <desc>
     *    保存单个设备多媒体信息
     * </desc>
     *
     * @param params 保存的参数
     * @return 受影响的行数
     * @author Lix
     * @createDate 2017-10-19
     */
    Integer save(Map<String,Object> params);

    /**
     * <desc>
     *      修改设备多媒体信息【根据多媒体Id（mediaId）】
     * </desc>
     *
     * @param params 保存的参数
     * @return 受影响的行数
     * @author Lix
     * @createDate 2017-10-19
     */
    Integer update(Map<String,Object> params);

    /**
     * <desc>
     *    根据多媒体Id列表启用/禁用多媒体设备信息
     * </desc>
     *
     * @param  mediaStatus 0:删除 1:可用 2:禁用
     * @param  enabled  true 启用  false 禁用
     * @param  mediaIdList 启用设备多媒体信息的多媒体Id列表
     * @return 受影响的行数
     * @author Lix
     @createDate 2017-10-19
     */
    Integer setMediaInfoEnable(@Param("mediaStatus") Integer mediaStatus, @Param("enable")boolean enabled, @Param("mediaIdList")List<String> mediaIdList);

    /**
     * <desc>
     *      分页查询设备多媒体信息
     * </desc>
     *
     * @param params 查询参数
     * @return  分页数据集
     * @author Lix
     * @createDate 2017-10-19
     */
    List<DeviceMediaInfoVO> getMediaInfoByPage(Map<String,Object> params);

    /**
     * <desc>
     *    查询指定设备多媒体的详细信息
     * </desc>
     *
     * @param mediaId  多媒体Id
     * @return  单个设备多媒体详细信息
     * @author Lix
     * @createDate 2017-10-19
     */
    DeviceMediaInfoVO getOneMediaInfo(@Param("mediaId") String mediaId);

    /**
     * <desc>
     *      获取设备多媒体信息记录总数
     * </desc>
     *
     * @param params 查询参数
     * @return 记录总行数
     * @author Lix
     * @createDate 2017-10-19
     */
    Integer getRecordCount(Map<String,Object> params);

    /**
     * <desc>
     *    获取指定多媒体服务信息数量【根据多媒体Id】
     * </desc>
     *
     * @param  mediaId 多媒体Id
     * @return 受影响的行数
     * @author Lix
     @createDate 2017-10-25
     */
    Integer getMediaIdCount(@Param("mediaId")java.lang.String mediaId);

    /**
     * <desc>
     *     分页查询多媒体资源
     * </desc>
     *
     * @param params 查询参数Map对象
     * @return 分页查询结果集
     * @throws Exception
     * @author wangzhi
     * @createDate 2018-04-04
     */
    List<DeviceMediaInfoVO> getDeviceMediaInfoByPage(Map<String,Object> params);

    /**
     * <desc>
     *      发布多媒体资源，支持批量
     * </desc>
     *
     * @param mediaId 多媒体资源id数组
     * @param nowTime 时间参数，用于修改广告投放时间
     * @return 影响的行数
     * @author wangzhi
     * @createDate 2018-04-09
     */
    Integer publishMedias(@Param("mediaId") String[] mediaId, @Param("nowTime") Date nowTime);

    /**
     * <desc>
     *     获取已过期但还在发布的多媒体资源id集合
     * </desc>
     *
     * @param nowTime 系统当前时间
     * @return 实际已过期的多媒体资源id集合
     * @author wangzhi
     * @createDate 2018-04-10
     */
    List<String> getDisabledMediaIdList(@Param("nowTime") Date nowTime);

    /**
     * <desc>
     *     获取已发布但还在未发布的多媒体资源id集合
     * </desc>
     *
     * @param nowTime 系统当前时间
     * @return 实际已发布的多媒体资源id集合
     * @author wangzhi
     * @createDate 2018/06/13
     */
    List<String> getWillPublishMediaIdList(@Param("nowTime") Date nowTime);

    /**
     * <desc>
     *     批量修改已过期多媒体资源的发布状态
     * </desc>
     *
     * @param mediaIdList 多媒体资源id集合
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2018-04-10
     */
    Integer setPublishStatusBatch(@Param("mediaIdList") List<String> mediaIdList);

    /**
     * <desc>
     *     批量修改已发布多媒体资源的发布状态
     * </desc>
     *
     * @param mediaIdList 多媒体资源id集合
     * @return 受影响的行数
     * @author wangzhi
     * @createDate 2018/06/13
     */
    Integer setWillPublishBatch(@Param("mediaIdList") List<String> mediaIdList);

    /**
     * <desc>
     *     查询所有投放时间为空的多媒体资源
     * </desc>
     *
     * @return 投放时间为空的多媒体资源
     * @author wangzhi
     * @createDate 2018-04-23
     */
    List<DeviceMediaInfoPO> getAllMediaInfoByPutTimeNull();

    /**
     * <desc>
     *     批量修改多媒体资源发布状态和投放时间
     * </desc>
     *
     * @param params
     * @return
     * @author wangzhi
     * @createDate 2018-04-23
     */
    Integer batchUpdatePutTimeAndPublishStatus(List<Map<String, Object>> params);

    /**
     * <desc>
     *     使用mediaId获取projectId(已去重)
     * </desc>
     *
     * @param mediaIds 多媒体id集合
     * @return 项目id集合
     * @author wangzhi
     * @createDate 2018/04/27
     */
    List<String> getProjectIdsByMediaIds(@Param("mediaIds") List<String> mediaIds);

    /**
     * <desc>
     *      设备多媒体资源审核通过
     * </desc>
     *
     * @param params 参数map
     * @return
     * @Author Zhu.yj
     * @createDate  2020/12/25
     */
    Integer audit(Map<String, Object> params);

}
